"""
装饰器
    在不修改代码的同时，增强函数或者类的行为
    接收一个函数作为参数，返回新的函数
    缺点：语法复杂

语法：
    定义

        def 函数装饰器名称(func):
            def wrapper(参数 *args,**kwargs):
                res = func(*args,**kwargs)
                return 值
            return wrapper

        @函数装饰器名称
        def 原函数名称(参数):
            函数体


        原函数名称()
"""
# 闭包的写法
# def old_func():
#     print('旧功能')
#
# def new_func(func):
#     def wrapper():
#         print('新')
#         func()
#
#     return wrapper
#
# old_func = new_func(old_func)
# old_func()

print('=' * 30)

# 装饰器写法

# 装饰器函数
def new_func(func):
    def wrapper():
        print('新')
        func()
    return wrapper

# 原函数
@new_func
def old_func():
    print('旧功能')

old_func()
